iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
Software Development

玩轉 Python 與 MongoDB系列 第 25

玩轉 Python 與 MongoDB_Day25_超時索引 TTL Index

  • 分享至 

  • xImage
  •  

今天我們要來介紹超時索引 TTL Index,這個索引可以讓 MongoDB 協助我們將陳舊的資料自動刪除,不需要人為介入的去清整資料

一、簡介

超時索引(TTL Index,Time-To-Live Index)是 MongoDB 中的一種索引,用於自動清除過期的文件。通過設定超時索引,您可以指定文件在特定時間內自動過期並被刪除,而無需手動處理。

超時索引主要用於需要定期刪除不再需要的數據的場景,例如日誌數據、緩存數據等。當超時索引設置後,MongoDB 將根據指定的超時時間來檢查文件是否過期,並自動刪除它們。

在 MongoDB 中,超時索引是通過特殊的欄位來實現的,該欄位包含日期或時間戳。MongoDB 會定期檢查這些日期,並刪除已過期的文件。

超時索引的主要特點包括:

  1. 自動過期:不需要手動處理過期文件,MongoDB 會自動處理。

  2. 高效性:通過超時索引,MongoDB 可以高效地定期刪除過期文件,減少了性能開銷。

  3. 適用於日誌和緩存:超時索引特別適用於存儲日誌數據、緩存數據和其他需要定期清理的情況。

  4. 靈活設置:您可以根據需要設置不同的超時時間,以滿足不同數據的需求。

總之,超時索引是 MongoDB 的一個有用功能,它可用於自動管理過期的數據,減少了手動維護的工作負擔,同時保持數據庫的整潔和高效。

二、範例

以下是使用 MongoDB 超時索引的簡單範例:

假設我們有一個名為 "session" 的集合,用於存儲用戶會話信息。我們希望自動刪除超過一小時未活動的會話。

首先,在插入會話文檔時,我們需要添加一個 "expiry" 欄位,該欄位表示會話的過期時間。

import pymongo
from datetime import datetime, timedelta

# 建立到MongoDB的連線
client = pymongo.MongoClient("mongodb://localhost:27017/")

# 選擇要建立索引的資料庫和集合
db = client["mydatabase"]
collection = db["session"]

# 插入一個會話文檔,並設定過期時間為一小時後
expiry_time = datetime.now() + timedelta(hours=1)
session_data = {
    "user_id": 123,
    "session_token": "abc123",
    "expiry": expiry_time
}
collection.insert_one(session_data)

# 關閉連線
client.close()

接下來,我們需要建立一個超時索引,以便自動刪除過期的會話文檔。我們將在 "expiry" 欄位上建立索引,並設置超時時間為一小時:

# 在 "expiry" 欄位上建立超時索引
index_name = collection.create_index([("expiry", pymongo.ASCENDING)], expireAfterSeconds=0)

print(f"建立的超時索引名稱為: {index_name}")

這樣,MongoDB 將每分鐘檢查一次 "expiry" 欄位,並自動刪除過期的會話文檔。

請注意,expireAfterSeconds 參數的值應該設置為 0,這表示文檔將在 "expiry" 欄位中指定的時間過後立即過期。

通過這種方式,我們可以確保過期的會話文檔會自動被 MongoDB 刪除,從而保持數據庫的整潔。


上一篇
玩轉 Python 與 MongoDB_Day24_索引基本概念
下一篇
玩轉 Python 與 MongoDB_Day26_文本索引 Text Index
系列文
玩轉 Python 與 MongoDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言